Test Driven Development (TDD) হল একটি সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়া যেখানে কোড লেখার আগে পরীক্ষাগুলি (tests) লেখা হয়। TDD-তে প্রথমে একটি পরীক্ষার কেস তৈরি করা হয়, তারপর সেই পরীক্ষাটি পাস করার জন্য কোড লেখা হয়। TDD এবং MVVM (Model-View-ViewModel) প্যাটার্নের সংমিশ্রণ অ্যাপ্লিকেশন ডেভেলপমেন্টে কার্যকারিতা, পরীক্ষাযোগ্যতা, এবং মডুলারিটি বৃদ্ধি করতে সাহায্য করে। MVVM প্যাটার্নের মধ্যে ViewModel অংশটি TDD-এর জন্য বিশেষভাবে উপযোগী, কারণ এটি ইউজার ইন্টারফেস (UI) থেকে বিচ্ছিন্ন থাকে এবং এটি সম্পূর্ণভাবে টেস্ট করা যেতে পারে।
TDD একটি সাধারণ তিনটি ধাপের প্রক্রিয়া অনুসরণ করে:
TDD প্রক্রিয়ায় পরীক্ষাগুলি সাধারণত ছোট, নির্দিষ্ট ফাংশনালিটি বা ইউনিটের জন্য লেখা হয় এবং তা ViewModel এবং Model এর লজিকাল অংশগুলির ওপর ফোকাস করা হয়, কারণ View অংশটি UI এর সাথে সম্পর্কিত হওয়ায় তা সাধারণত আলাদা টেস্টিং কৌশল প্রয়োজন।
MVVM প্যাটার্নে, ViewModel-এ থাকা লজিকটি খুবই গুরুত্বপূর্ণ কারণ এটি পুরোপুরি টেস্ট করা যায় এবং তা View থেকে বিচ্ছিন্ন থাকে। TDD এবং MVVM এর সংমিশ্রণে, ViewModel-এর সমস্ত লজিকের জন্য ইউনিট টেস্ট (Unit Test) লেখা হবে এবং Model এর ডেটা প্রসেসিং এবং ভ্যালিডেশন কার্যকলাপের জন্যও টেস্ট তৈরি করা যাবে।
ধরা যাক, আমাদের একটি LoginViewModel আছে, যেখানে ব্যবহারকারী একটি ইউজারনেম এবং পাসওয়ার্ড প্রদান করে এবং এই ডেটা যাচাই করা হয়। আমাদের TDD ব্যবহার করে প্রথমে পরীক্ষা তৈরি করতে হবে, তারপর সেই পরীক্ষার জন্য কোড লিখব।
[TestClass]
public class LoginViewModelTests
{
private LoginViewModel _viewModel;
[TestInitialize]
public void Setup()
{
_viewModel = new LoginViewModel();
}
[TestMethod]
public void Login_WhenValidCredentialsProvided_ShouldReturnTrue()
{
// Arrange
_viewModel.Username = "validUser";
_viewModel.Password = "validPassword";
// Act
var result = _viewModel.LoginCommand.Execute(null);
// Assert
Assert.IsTrue(result);
}
[TestMethod]
public void Login_WhenInvalidCredentialsProvided_ShouldReturnFalse()
{
// Arrange
_viewModel.Username = "invalidUser";
_viewModel.Password = "invalidPassword";
// Act
var result = _viewModel.LoginCommand.Execute(null);
// Assert
Assert.IsFalse(result);
}
}
এখানে, প্রথমে LoginViewModel এ ডিফাইন করা LoginCommand এর কাজ পরীক্ষা করা হচ্ছে। Username
এবং Password
প্রোপার্টি পরিবর্তন করে, LoginCommand এর মাধ্যমে লগইন প্রসেস পরীক্ষা করা হচ্ছে।
এখন, LoginViewModel-এ কোড লেখা হবে যাতে উপরের টেস্ট পাস করে।
public class LoginViewModel : INotifyPropertyChanged
{
private string _username;
private string _password;
public string Username
{
get => _username;
set
{
if (_username != value)
{
_username = value;
OnPropertyChanged();
}
}
}
public string Password
{
get => _password;
set
{
if (_password != value)
{
_password = value;
OnPropertyChanged();
}
}
}
public ICommand LoginCommand { get; private set; }
public LoginViewModel()
{
LoginCommand = new RelayCommand(ExecuteLogin);
}
private bool ExecuteLogin()
{
// Fake validation for simplicity
return Username == "validUser" && Password == "validPassword";
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
এখন, আমাদের LoginViewModel সঠিকভাবে LoginCommand এর মাধ্যমে লগইন যাচাই করছে। এভাবে, TDD প্রক্রিয়া অনুসরণ করে আমরা ViewModel-এর লজিক তৈরি করেছি এবং পরীক্ষাগুলি লিখেছি যা পাস হচ্ছে।
কোড এবং টেস্ট পাস হলে, এরপর আমরা কোডটি রিফ্যাক্টর করতে পারি যাতে তা আরো পরিষ্কার এবং মেইনটেনেবল হয়। উদাহরণস্বরূপ, যদি ExecuteLogin মেথডের মধ্যে কোনো জটিলতা থাকে, তাহলে তা আলাদা কোনো সেবা বা রেপোজিটরি ক্লাসে সরিয়ে নেওয়া যেতে পারে।
Test Driven Development (TDD) এবং MVVM প্যাটার্ন একসঙ্গে ব্যবহৃত হলে সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়া আরও কার্যকরী এবং মডুলার হয়। ViewModel অংশটি টেস্ট করার জন্য আদর্শ, কারণ এটি UI লজিক থেকে পৃথক থাকে এবং এতে থাকা লজিকের জন্য ইউনিট টেস্ট তৈরি করা যায়। TDD পদ্ধতিতে, কোড লেখার আগে টেস্ট তৈরি করা হয়, যা উন্নত কোড কোয়ালিটি, স্থিতিশীলতা, এবং সহজ রিফ্যাক্টরিং নিশ্চিত করে। TDD এবং MVVM এর একত্রিত ব্যবহারে সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়াটি আরো সুশৃঙ্খল এবং টেস্টযোগ্য হয়ে ওঠে।
common.read_more